home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 1 (Walnut Creek)
/
Aminet - June 1993 [Walnut Creek].iso
/
aminet
/
misc
/
amag
/
12b92.lha
/
Knobelecke
/
Stellensuche
/
displ.asm
< prev
next >
Wrap
Assembly Source File
|
1992-11-02
|
3KB
|
146 lines
;************************************************************************
; Routine zur Ausgabe von pi *
; Teil des Programms E.asm aus AMIGA-MAGAZIN 9/92 (mit Anpassungen) *
; *
; *
; Parameter: in: (a5) +8,12,16 *
; (a5)+8 enthaelt pi als Dualbruch der Laenge (a5)+12 *
; (a5)+16 enthaelt die Ausgabelaenge! *
; out: Ausgabe von pi als Dezimalbruch und #Nachkommastellen*
;************************************************************************
ExecBase: equ 4
RawDoFmt: equ -522
OldOpenLib: equ -408
CloseLib: equ -414
Open: equ -30
Close: equ -36
Write: equ -48
Output: equ -60
public _displ
_displ:
movem.l d0-a6,-(a7)
lea pi(pc),a0
move.l 8(a5),(a0) A(pi)
move.l 12(a5),4(a0) llen
move.l 12(a5),d0
moveq #2,d1
mulu d1,d0
move.l d0,8(a0) wlen
mulu d1,d0
move.l d0,12(a0) flen
move.l 16(a5),16(a0) alen
move.l ExecBase,a6
lea dosname(pc),a1
jsr OldOpenLib(a6)
move.l d0,dosbase
move.l d0,a6
jsr Output(a6)
move.l d0,handle
ausgabe:
move.l pi(pc),a3
move.l (a3),d2
lea formatstr0(pc),a0
bsr print
clr.l (a3)
move.l alen(pc),d5
clr.l d6 ;Zaehler init
move.l flen(pc),a5
moveq #0,d2
move.l wlen(pc),d7
subq.l #1,d7
drucken:
move.l pi(pc),a3
adda.l a5,a3
move.l d7,d3 ;Schleifenlaenge
moveq #0,d1
moveq #0,d0
druckloop:
move.w -(a3),d0
mulu #10000,d0
add.l d1,d0
move.w d0,(a3)
tst.w d2
bne ueberlauf
tst.w d0 ;Nullen
bne dremember ;von rechts
lea -2(a5),a5 ;merken
subq.l #1,d7 ;neue Schleifenlaenge
blt ddone ;fertig, wenn negativ
bra ueberlauf
dremember:
moveq #1,d2
ueberlauf:
clr.w d0
swap d0
move.w d0,d1
dbra d3,druckloop
move.l pi(pc),a3
move.l (a3),d2
lea formatstr1(pc),a0
bsr print
clr.l (a3)
addq.l #4,d6
dbra d5,drucken
ddone:
move.l d6,d2
lea formatstr3(pc),a0
bsr print
ende:
move.l ExecBase,a6
move.l dosbase(pc),a1
jsr CloseLib(a6)
moveq #0,d0
movem.l (a7)+,d0-a6
rts
print:
movem.l d0-a6,-(a7)
move.l #-1,length
lea datas(pc),a1
move.l d2,(a1)
lea routine(pc),a2
lea buffer,a3
move.l ExecBase,a6
jsr RawDoFmt(a6)
move.l handle(pc),d1
move.l #buffer,d2
move.l length,d3
move.l dosbase(pc),a6
jsr Write(a6)
movem.l (a7)+,d0-a6
rts
routine:
move.b d0,(a3)+
clr.b (a3)
addq.l #1,length
rts
length: dc.l 0
dosbase: dc.l 0
handle: dc.l 0
datas: dc.l 0
dosname: dc.b "dos.library",0
formatstr0: dc.b "pi = %ld.",0
formatstr1: dc.b "%04ld",0
formatstr2: dc.b "Umläufe : %-ld",10,0
formatstr3: dc.b 10,"Anzahl der Nachkommastellen: %-ld",10,0
even
buffer: ds.b 250
pi: dc.l 0
llen: dc.l 0
wlen dc.l 0
flen dc.l 0
alen dc.l 0
END